package 数组系列;

public class GenerateMatrix {
    public int[][] generateMatrix(int n) {
        int [][] ans =new int[n][n];   //存放结果的数组
        int x = 1;  //数字
        int max = n-1, min = 0; //max表示当前圈的最大边界，min表示最小边界
        for(int i=0;i<n/2;i++){ //循环为2/n次
            for(int j=min;j<=max;j++){  // 模拟填充上行从左到右(左闭右闭)
                ans[min][j] = x;
                x++;
            }
            for(int j=min+1;j<=max;j++){ // 模拟填充右列从上到下(左开右闭)
                ans[j][max] = x;
                x++;
            }
            for(int j=max-1;j>=min;j--){ // 模拟填充下行从右到左(左开右闭)
                ans[max][j] = x;
                x++;
            }
            for(int j=max-1;j>min;j--){ // 模拟填充左列从下到上(左开右开)
                ans[j][min] = x;
                x++;
            }
            max--;  // 第二圈开始的时候，起始位置要各自加1， 例如：第一圈起始位置是(0, 0)，第二圈起始位置是(1, 1)
            min++;
        }
        if(n%2==1){ // 如果n为奇数的话，需要单独给矩阵最中间的位置赋值
            ans[n/2][n/2] = n * n;
        }
        return ans;
    }
}
